# -*-coding:utf-8-*-
# 砖石继承（菱形继承）问题

# class A():
#     def __init__(self):
#         print("进入A...")
#         print("离开A...")
#
#
# class B(A):
#     def __init__(self):
#         print("进入B...")
#         A.__init__(self)
#         print("离开B...")
#
#
# class C(A):
#     def __init__(self):
#         print("进入C...")
#         A.__init__(self)
#         print("离开C...")
#
#
# class D(B, C):
#     def __init__(self):
#         print("进入D...")
#         B.__init__(self)
#         C.__init__(self)
#         print("离开D...")


# d = D()
# 使用类名.__more__获得MRO的顺序（注：object是所有类的基类，金字塔的顶端）
# print (D.__mro__)


# C3算法确保同一个类只会被搜寻一次。
# 在避免同一类被调用多次的前提下，使用广度优先和从左到右的原则去寻找需要的属性和方法。
class A():
    def __init__(self):
        print("进入A...")
        print("离开A...")


class B(A):
    def __init__(self):
        print("进入B...")
        super().__init__()
        print("离开B...")


class C(A):
    def __init__(self):
        print("进入C...")
        super().__init__()
        print("离开C...")


class D(B, C):
    def __init__(self):
        print("进入D...")
        super().__init__()
        print("离开D...")


d = D()
